# TCP 服务端（机器人回复逻辑）

import socket

def tcp_server():
    # 机器人预设回复字典（键：用户输入，值：机器人回复）
    reply_dict = {
        "你好": "你好呀！我是聊天机器人~",
        "早上好": "早上好！今天也要元气满满哦！",
        "再见": "再见啦，欢迎下次再聊！",
        "你是谁": "我是基于TCP协议的聊天机器人，很高兴为你服务！",
        "天气怎么样": "今天天气晴朗，温度25℃，适合出游~",
        "谢谢": "不客气！有问题随时找我~"
    }
    
    # 创建TCP套接字（AF_INET：IPv4，SOCK_STREAM：TCP协议）
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定端口（监听8000端口）
    server_addr = ('0.0.0.0', 8000)
    tcp_socket.bind(server_addr)
    
    # 开始监听（最大等待连接数5）
    tcp_socket.listen(5)
    print("TCP服务端已启动，正在8000端口等待连接...")
    
    # 接受客户端连接（阻塞直到有连接）
    conn, client_addr = tcp_socket.accept()
    print(f"客户端{client_addr}已连接，开始聊天...")
    
    try:
        while True:
            # 接收客户端消息（缓冲区1024字节）
            data = conn.recv(1024)
            if not data:
                # 客户端断开连接
                print("客户端已断开连接。")
                break
            
            # 解码消息
            client_msg = data.decode('utf-8').strip()
            print(f"收到客户端：{client_msg}")
            
            # 查找回复（无匹配则返回默认值）
            reply = reply_dict.get(client_msg, "抱歉，我不太理解你的意思呢~")
            # 发送回复
            conn.send(reply.encode('utf-8'))
            
            # 若客户端发送"bye"，结束聊天
            if client_msg.lower() == 'bye':
                print("客户端请求结束，关闭连接。")
                break
    finally:
        # 关闭连接和套接字
        conn.close()
        tcp_socket.close()
        print("服务端已关闭。")

if __name__ == "__main__":
    tcp_server()